package com.example.file_management.pojo.material;

import com.fasterxml.jackson.annotation.JsonProperty;
//import jakarta.persistence.*;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;

import java.time.LocalDateTime;

// TODO：注意需要检查驼峰映射

//@Entity
//@Table(name = "task_table")
@Data  // Lombok注解：自动生成getter、setter、toString、equals、hashCode方法
@NoArgsConstructor // Lombok注解：生成无参构造函数
@AllArgsConstructor // Lombok注解：生成全参构造函数
@Builder // 可选：简化对象创建
@JsonSerialize(using = LocalDateTimeSerializer.class)
@JsonDeserialize(using = LocalDateTimeDeserializer.class)
public class Task {

    @JsonProperty("task_id")
    private Long taskId; // 任务 ID

    @JsonProperty("project_id")
    private Long projectId;
    @JsonProperty("task_name")
    private String taskName; // 任务名称

    @JsonProperty("task_description")
    private String taskDescription; // 任务描述

    @JsonProperty("task_status")
    private TaskStatus taskStatus; // 任务状态（枚举）

    @JsonProperty("task_start_time")
    private LocalDateTime taskStartTime; // 任务开始时间

    @JsonProperty("task_end_time")
    private LocalDateTime taskEndTime; // 任务结束时间

    @JsonProperty("task_owner")
    private String taskOwner; // 任务负责人

    @JsonProperty("create_time")
    private LocalDateTime createTime; // 任务创建时间

    @JsonProperty("update_time")
    private LocalDateTime updateTime; // 任务更新时间

    /**
     * 任务状态枚举
     */
    public enum TaskStatus {
        NotStarted,
        InProgress,
        Completed,
        OnHold,
        Cancelled,
        PendingReview,
        Approved,
        Rejected,
        PendingAssignment,
        Deferred   // 延期
    }
}